﻿using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Server.Module.Logic;
using Server.Module.MonggoDB;
using Server.Module.WebSocket.TCP;

namespace Server.Module
{
    public static class ModuleManager
    {
        private static List<ModuleBase> allModule;
        public static TcpNetModule TcpModule;
        public static DataBaseMoudle DataMoudle;
        
        private static MainLogicModule mainLogicModule; 
        public static void Init()
        { 
            allModule = new List<ModuleBase>();

            TcpModule = new TcpNetModule(EModuleType.TcpNetModule);
            allModule.Add(TcpModule);

            DataMoudle = new DataBaseMoudle(EModuleType.DataBaseMoudle);
            allModule.Add(DataMoudle);

            mainLogicModule = new MainLogicModule(EModuleType.MainLogicModule);
            allModule.Add(mainLogicModule);

            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].Init();
            }
        }

        public static void Start()
        {
            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].Start();
            }
        }

        public static void EarlyUpdate()
        {
            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].EarlyUpdate();
            }
        }
        public static void Update()
        {
            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].Update();
            }
        }
        public static void LateUpdate()
        {
            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].LateUpdate();
            }
        }
        public static void Realease()
        {
            for (int i = 0; i < allModule.Count; i++)
            {
                allModule[i].End();
                allModule[i].Release();
            }
        }
    }
}
